# CMake build script for ZeroMQ unit tests
cmake_minimum_required(VERSION "2.8.1")

set(unittests
  unittest_ypipe
  unittest_poller
  unittest_mtrie
)

#IF (ENABLE_DRAFTS)
#    list(APPEND tests
#    )
#ENDIF (ENABLE_DRAFTS)

# add location of platform.hpp for Windows builds
if(WIN32)
    add_definitions(-DZMQ_CUSTOM_PLATFORM_HPP)
    add_definitions(-D_WINSOCK_DEPRECATED_NO_WARNINGS)
    # Same name on 64bit systems
    link_libraries(ws2_32.lib)
endif()

include_directories("${CMAKE_SOURCE_DIR}/include" "${CMAKE_SOURCE_DIR}/src" "${CMAKE_BINARY_DIR}")

foreach(test ${unittests})
  # target_sources not supported before CMake 3.1
  add_executable(${test} ${test}.cpp)

  # per-test directories not generated on OS X / Darwin
  if (NOT ${CMAKE_CXX_COMPILER_ID} MATCHES "Clang.*")
      link_directories(${test} PRIVATE "${CMAKE_SOURCE_DIR}/../lib")     
  endif()
  
  target_link_libraries(${test} libzmq-static ${OPTIONAL_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} unity)
  
  if(RT_LIBRARY)
    target_link_libraries(${test} ${RT_LIBRARY})
  endif()
  
  if(WIN32)
    add_test(NAME ${test} WORKING_DIRECTORY ${LIBRARY_OUTPUT_PATH} COMMAND ${test})
  else()
    add_test(NAME ${test} COMMAND ${test})
  endif()
  
  set_tests_properties(${test} PROPERTIES TIMEOUT 10)
  
  # TODO prevent libzmq (non-static) being in the list of link libraries at all
  get_target_property(LIBS ${test} LINK_LIBRARIES)
  list(REMOVE_ITEM LIBS libzmq)
  set_target_properties(${test} PROPERTIES LINK_LIBRARIES "${LIBS}")
endforeach()

#Check whether all tests in the current folder are present
#TODO duplicated with tests/CMakeLists.txt, define as a function?
file(READ "${CMAKE_CURRENT_LIST_FILE}" CURRENT_LIST_FILE_CONTENT)
file(GLOB ALL_TEST_SOURCES "test_*.cpp")
foreach(TEST_SOURCE ${ALL_TEST_SOURCES})
  get_filename_component(TESTNAME "${TEST_SOURCE}" NAME_WE)
  string(REGEX MATCH "${TESTNAME}" MATCH_TESTNAME "${CURRENT_LIST_FILE_CONTENT}")
  if (NOT MATCH_TESTNAME)
    message(AUTHOR_WARNING "Test '${TESTNAME}' is not known to CTest.")
  endif()
endforeach()
